import { Toast, Jump, removeProperty} from '@/utils/tools.js';
import store from '@/store/index.js'
import { baseURL } from '@/common/baseconfig.js'
import cookie from '@/utils/auth.js'


/**
 * @description 	以uni.request为基础封装
 * @param {string}  method		请求方式  post or get
 * @param {string}  url 		请求地址
 * @param {string}  params		参数集合	传参跟在链接后
 * @param {object}  data		data类型  传参在body内
 * @param {Boolean}  mask		时候打开 loading 默认打开
 * @param {Boolean}  toast		时候关闭Toast  类型为列表时默认不打开
 * @param {Boolean}  list 		是否是列表  主要处理列表模式下返回结果异常问题
 * @param {string}  isBase 		是否替换请求的URL
 * @param {string | Number} 	timeout 超时时间
 * @param {Object}  headers 	请求头
 * @returns {object} 
 * @example  request({
				url: '/url',
				method: "post",
				data,
				params
			})
 */

export async function request({ method, url, params, data, mask = false, list = false, toast = false, isBase, timeout = 60000, headers,isLogin = true }) {
	try {
		params = removeProperty(params);
		let _url = url;
		//params传值方式  默认拼接到请求后缀
		// if (!uni.$m.verify.isEmpty(params)) {
		// 	_url = `${_url}${uni.$m.verify.urlEncode(params)}`
		// }
		let header = {
			'Token': cookie.get('Token'),
			"APPID":'60001',
			...headers
		};
		if (mask) {
			// 显示Loading
			// #ifdef APP-PLUS
			plus.nativeUI.showWaiting();
			// #endif
			// #ifndef APP-PLUS
			uni.showLoading({
				mask: true,
				title: '加载中'
			})
			// #endif
		}
		return new Promise((resolve, reject) => {
			uni.request({
				url: (isBase || baseURL) + _url,
				data: data || params,
				header: header,
				method: method,
				timeout: timeout,
				success: ({ data, statusCode }) => {
					if (statusCode === 200) {
						const { success, msg, code } = data;
						const dataType = {
							list: [],
							pageCount: 0,
						}
						//错误时  默认打印提示
						if (!success) {
							if (toast) Toast(msg)
							resolve(data);
						}
						if (code == 'notlogin') {
							store.commit('user/REMOVE_TOKEN')
							// 非登陆页时才跳转
							let noewRoute = '';
							try {
								noewRoute = getCurrentPages()[0]['route'];
							} catch (e) {
								console.log(e)
							}
							
							console.log(noewRoute)
							if (noewRoute !== 'start') {
								if(isLogin){
									// Toast(msg)
									// #ifdef MP-WEIXIN
									Jump('/start');
									// #endif
									// #ifndef MP-WEIXIN
									Jump('/pages/login/login');
									// #endif
								}
							}
						}
						resolve(data);
					} else {
						errorHandler(statusCode);
						reject(data);
					}
				},
				fail: (e) => {
					// errorHandler('ERR_CONNECTION_TIMED_OUT')
					return reject({
						success:false
					})
				},
				complete: (e) => {
					if (mask) {
						// 隐藏Loading
						// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting();
						// #endif
						// #ifndef APP-PLUS
						uni.hideLoading();
						// #endif
					}
				}
			})
		})
	} catch (e) {
		console.log(e)
		//TODO handle the exception
	}
}


function errorHandler(statusCode) {
	let errorCode;
	if (statusCode) {
		errorCode = statusCode
	} else {
		// errorCode = error.code;
	}
	const errorHint = {
		'ERR_CONNECTION_TIMED_OUT': '请求超时，请稍后再试',
		'request:fail timeout': '请求超时，请稍后再试',
		"ERR_NETWORK": '网络繁忙，请稍后再试',
		"ECONNABORTED": '请求超时',
		'400': '请求错误',
		'401': '未授权',
		'403': '拒绝访问',
		'404': '请求地址出错',
		'408': '请求超时',
		'500': '服务器内部错误',
		'501': '服务未实现',
		'502': '网关错误',
		'503': '服务不可用',
		'504': '网关超时',
		'505': 'HTTP版本不受支持',
	} [errorCode] || '网络繁忙,请稍后再试';
	// //错误页面
	// Jump({
	// 	url: '/pages/error',
	// 	params: {
	// 		msg: errorHint
	// 	}
	// })
	// Toast(errorHint);
}